<?php

namespace Mouta\AmistateBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

use Mouta\AmistateBundle\Entity\Usuario;
use Mouta\AmistateBundle\Entity\Denuncias;
use Mouta\AmistateBundle\Entity\Solicitud;





class SocialController extends Controller
{
    public function denunciarAction()
    {
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $request = $this->getRequest();
        $infractor = $em->getRepository('AmistateBundle:Usuario')->findOneBy(array('id'=>$request->get('denuncia-infractor')));
        $mensaje = $request->get('denuncia-mensaje');
        $motivo = $request->get('denuncia-motivo');
        $tipo = $request->get('denuncia-tipo');
        $extra = $request->get('denuncia-extra');
        
        $denuncia = new Denuncias();
        $denuncia->setDenunciante($user);
        $denuncia->setInfractor($infractor);
        $denuncia->setMensaje($mensaje);
        $denuncia->setMotivo($motivo);
        $denuncia->setTipo($tipo);
        $denuncia->setExtra($extra);
        $em->persist($denuncia);
        $em->flush();
        return new Response(json_encode( array('valid'=>true) ));
    }
    
    public function solicitudAction()
    {
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $request = $this->getRequest();
        $para = $em->getRepository('AmistateBundle:Usuario')->findOneBy(array('id'=>$request->get('sol-amistad-usuario')));
        $mensaje = $request->get('sol-amistad-mensaje');
        
        $solicitudes = $em->getRepository('AmistateBundle:Solicitud')->findOneBy(array('de'=>$user->getId(),'para'=>$request->get('sol-amistad-usuario')));
        if(!$solicitudes){
            $solicitud = new Solicitud();
            $solicitud->setDe($user);
            $solicitud->setPara($para);
            $solicitud->setMensaje($mensaje);
            $em->persist($solicitud);
            $em->flush();
        }
        return new Response(json_encode( array('valid'=>true) ));
    }

    public function amistadAction(){
        $limit = 11;
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $amistades = $em->getRepository('AmistateBundle:Solicitud')->getAmistades($user->getId(),$limit,0);
        return $this->render('AmistateBundle:social:baseamistad.html.twig',array(
                'user'=>$user,
                'amistades'=>$amistades,
                'limit'=>$limit,
                'page'=>1,
            ));
    }

    public function amistadPageAction($page){
        $limit = 10;
        $offset = ($page-1) * $limit;
        
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $amistades = $em->getRepository('AmistateBundle:Solicitud')->getAmistades($user->getId(),$limit+1,$offset);
        return $this->render('AmistateBundle:social:amistad.html.twig',array(
                'user'=>$user,
                'amistades'=>$amistades,
                'limit'=>$limit,
                'page'=>$page,
            ));
    }
    
    public function aceptarAmistadAction(){
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $solicitud = $em->find('AmistateBundle:Solicitud', $this->getRequest()->get('id'));
        if($solicitud){
            if($solicitud->getPara()->getId() == $user->getId()){
                $solicitud->setEstado(2);
                $em->persist($solicitud);
                $em->flush();
                return new Response(json_encode( array('valid'=>true) ));
            }
        }
        return new Response(json_encode( array('valid'=>false) ));
    }
    
    public function eliminarAmistadAction(){
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $solicitud = $em->find('AmistateBundle:Solicitud', $this->getRequest()->get('id'));
        if($solicitud){
            if($solicitud->getPara()->getId() == $user->getId() || $solicitud->getDe()->getId() == $user->getId() ){
                $em->remove($solicitud);
                $em->flush();
                return new Response(json_encode( array('valid'=>true) ));
            }
        }
        return new Response(json_encode( array('valid'=>false) ));
    }
    
    public function cancelarAmistadAction(){
        $user = $this->get('security.context')->getToken()->getUser();
        $em = $this->getDoctrine()->getEntityManager();
        $solicitud = $em->find('AmistateBundle:Solicitud', $this->getRequest()->get('id'));
        if($solicitud){
            if($solicitud->getPara()->getId() == $user->getId() || $solicitud->getDe()->getId() == $user->getId() ){
                $em->remove($solicitud);
                $em->flush();
                return new Response(json_encode( array('valid'=>true) ));
            }
        }
        return new Response(json_encode( array('valid'=>false) ));
    }
    
}
